import {decrypt, encrypt} from "@/utils/jsencrypt";
import { isMobile } from "@/utils/index";
import store from "@/store";
import router from "@/router";

const AccessTokenKey = 'ACCESS_TOKEN'
const RefreshTokenKey = 'REFRESH_TOKEN'

// ========== Token 相关 ==========

export function getAccessToken() {
  return localStorage.getItem(AccessTokenKey)
}

export function getRefreshToken() {
  return localStorage.getItem(RefreshTokenKey)
}

export function setToken(token) {
  localStorage.setItem(AccessTokenKey, token.accessToken)
  localStorage.setItem(RefreshTokenKey, token.refreshToken)
}

export function removeToken() {
  localStorage.removeItem(AccessTokenKey)
  localStorage.removeItem(RefreshTokenKey)
}

// ========== 账号相关 ==========

const UsernameKey = 'USERNAME'
const PasswordKey = 'PASSWORD'
const RememberMeKey = 'REMEMBER_ME'

export function getUsername() {
  return localStorage.getItem(UsernameKey)
}

export function setUsername(username) {
  localStorage.setItem(UsernameKey, username)
}

export function removeUsername() {
  localStorage.removeItem(UsernameKey)
}

export function getPassword() {
  const password = localStorage.getItem(PasswordKey)
  return password ? decrypt(password) : undefined
}

export function setPassword(password) {
  localStorage.setItem(PasswordKey, encrypt(password))
}

export function removePassword() {
  localStorage.removeItem(PasswordKey)
}

export function getRememberMe() {
  return localStorage.getItem(RememberMeKey) === 'true'
}

export function setRememberMe(rememberMe) {
  localStorage.setItem(RememberMeKey, rememberMe)
}

export function removeRememberMe() {
  localStorage.removeItem(RememberMeKey)
}

// ========== 租户相关 ==========

const TenantIdKey = 'TENANT_ID'
const TenantNameKey = 'TENANT_NAME'

export function getTenantName() {
  return localStorage.getItem(TenantNameKey)
}

export function setTenantName(username) {
  localStorage.setItem(TenantNameKey, username)
}

export function removeTenantName() {
  localStorage.removeItem(TenantNameKey)
}

export function getTenantId() {
  return localStorage.getItem(TenantIdKey)
}

export function setTenantId(username) {
  localStorage.setItem(TenantIdKey, username)
}

export function removeTenantId() {
  localStorage.removeItem(TenantIdKey)
}

export class getToken {
}


export function findRouterData(type, list, path, ParentPath = '') {
  return Boolean(
    list.find((e) => {
      if (type === 'mobile') {
        return e.visible && ((ParentPath + e.path) === path) || findRouterData(type, e.children || [], path, e.path || '');
      }
      return !e.hidden && ((ParentPath + e.path) === path) || findRouterData(type, e.children || [], path, e.path || '');
    }),
  );
}

// 判断当前页面是否存在权限
export async function getSilderList(type, path) {
  const menus = type === 'mobile' ? store.getters.mMenus : store.getters.sidebarRouters;
  return findRouterData(type, menus, path, type === 'mobile' ? '/m/' : '');
}

export async function getPath(type, path) {
  const accessRoutes = await store.dispatch('GenerateRoutes');
  router.addRoutes(accessRoutes) // 动态添加可访问路由表

  if (router.match(path) && await getSilderList(type, path)) {
    return path;
  }

  return  type === 'mobile' ? '/m' : '/';
}


// 移动和pc端路径转换
export async function devicePathConvert(path = '') {
  const mobile = isMobile();

  if (!path) {
    return mobile ? '/m' : '/';
  }

  if (router.match(path)?.meta?.currency) {
    return path
  }

  if (mobile && path.indexOf('/m') !== 0) {
    path = await getPath('mobile', `/m${path}`);
  }

  if (!mobile && path.indexOf('/m') === 0) {
    path = await getPath('pc', path.replace(/^\/m/g, ""));
  }

  return path
}